/*
class Solution {
public:
    int findLongestChain(vector<vector<int>>& pairs) {
        
        //排序，按照第二个数升序排列
        sort(pairs.begin(),pairs.end(),cmp);
        
        //调试
        for(int i=0;i<pairs.size();i++){
            cout<<"["<<pairs[i][0]<<","<<pairs[i][1]<<"]"<<" ";
        }
        cout<<endl;
        

        int num=1;//总数
        int len=pairs.size();
        int left=pairs[0][0];//左边界
        int right=pairs[0][1];//右边界
        for(int i=1;i<len;i++){
            //贪心思想：如果下一个的第一个数大于右边界，更新右边界，计数加1
            if(pairs[i][0]>right){
                right=pairs[i][1];
                num++;
            }
        }
        return num;
    }

private:
    static bool cmp(const vector<int> & a,const vector<int> & b){
        return a[1]<b[1];
    }
};
*/

class Solution {
public:
    int findLongestChain(vector<vector<int>>& pairs) {
        
        sort(pairs.begin(),pairs.end(),cmp);
        int len=pairs.size();
        vector<int> res(len,1);
        for(int i=0;i<len;i++){
            for(int j=0;j<i;j++){
                if(pairs[i][0]>pairs[j][1]){
                    res[i]=max(res[i],res[j]+1);
                }
            }
        }
        return res[len-1];
    }

private:
    static bool cmp(const vector<int> & a,const vector<int> & b){
        if(a[0]!=b[0]){
            return a[0]<b[0];
        } else{
            return a[1]<b[1];
        }
    }
};